package com.dyp.global_exception_handler.ctr;

import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
//@ControllerAdvice
public class GlobalDataBinding {

    //全局数据绑定

    /**
     * @ModelAttribute主要用于模型数据预处理和请求参数绑定
     * 1.模型数据注入：自动将方法返回值或参数添加到 Spring MVC 的 Model 对象中。
     * 2.请求参数绑定：将 HTTP 请求参数映射到对象属性（替代 @RequestParam 逐个字段声明）。
     *
     * 参数添加到Spring MVC的model对象中示例，并最终如何在视图渲染时候使用
     *
     * @GetMapping("/user/profile")
     *     public String showUserProfile(
     *             @ModelAttribute("currentUser") User user,  // 自动注入Model
     *             Model model) {
     *         // 方法内无需手动添加，user对象已存在于model中
     *         return "user-profile";  // 视图层可通过${currentUser}访问 <div th:text="${currentUser.name}"> 用户名</div>
     *     }
     *
     * 常见使用场景：
     * 1.预加载公共数据：尤其是多个接口在调用时候都需要加载某些数据，比如系统配置，那么就可以通过该功能自动处理同样的操作，避免在每个方法中重复调用查询数据。
     * 2.模型数据注入：方便后端页面渲染使用
     */

    @ModelAttribute(name = "md")
    public Map<String,Object> mydata() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("age", 18);
        map.put("gender", "男");
        return map;
    }
}
